/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sn.dao;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.PersistenceException;
import org.springframework.stereotype.Component;
import sn.metier.Personne;

/**
 *
 * @author Pluce
 */
@Component
public class PersonneDAOImpl extends GenericDAOImpl<Personne> implements PersonneDAO {

    @Override
    public Personne findByEmailPasswd(String email, String passwd) {
        try {
            return (Personne)em.createQuery("SELECT p FROM Personne p WHERE p.email = ? AND p.passwd = ?").setParameter(1, email).setParameter(2, passwd).getSingleResult();
        } catch(PersistenceException pe) {
            pe.printStackTrace();
            return null;
        }
    }

    @Override
    protected Class<Personne> entityClass() {
        return Personne.class;
    }

    @Override
    public List<Personne> findByNom(String nom) {
        return (List<Personne>)em.createQuery("SELECT p FROM Personne p WHERE p.nom LIKE ?").setParameter(1, "%"+nom+"%").getResultList();
    }

    @Override
    public List<Personne> findByPrenom(String prenom) {
        return (List<Personne>)em.createQuery("SELECT p FROM Personne p WHERE p.prenom LIKE ?").setParameter(1, "%"+prenom+"%").getResultList();
    }

    @Override
    public List<Personne> findByPseudo(String pseudo) {
        return (List<Personne>)em.createQuery("SELECT p FROM Personne p WHERE p.pseudo LIKE ?").setParameter(1, "%"+pseudo+"%").getResultList();
    }

    @Override
    public List<Personne> findByIds(List<Long> liste) {
        //return (List<Personne>) em.createQuery("SELECT p FROM Personne p WHERE p.id IN (?)").setParameter(1, liste).getResultList();
        List<Personne> lp = new ArrayList<Personne>();
        for(Long id: liste){
            lp.add(findById(id));
        }
        return lp;
    }

    @Override
    public boolean isEmailExistant(String email) {
        List<Personne> lp = this.em.createQuery("select p from Personne p where p.email = ?").setParameter(1, email).getResultList();
        if(lp.isEmpty()){
            return false;
        }
        return true;
    }
    
}
